/**
 * 工具级的一些函数中间件
 * 用来向 ctx下插入各种常用的功能函数
 * @param {*} ctx
 * @param {*} next
 */
import { reportError } from '../utils/report-error';
import mongoose from 'mongoose';

// 解析page和limit参数
function parsePageAndLimit(query) {
  if (!query) return { page: 1, limit: 10 };
  let { page, limit } = query;
  if (page) {
    page = parseInt(page);
    if (page < 1) {
      page = 1;
    }
  } else {
    page = 1;
  }
  if (limit) {
    limit = parseInt(limit);
  } else {
    limit = 10;
  }
  return {
    page,
    limit
  };
}

export default async function (ctx, next) {
  ctx.parsePageAndLimit = parsePageAndLimit;
  // 上报日志
  ctx.logger = reportError;
  // 返回json
  ctx.json = async function (success = true, message = 'success', data = {}) {
    ctx.body = {
      ok: success,
      msg: message,
      data
    };
  };
  ctx.transId = function (id) {
    // @ts-ignore
    return new mongoose.Types.ObjectId(id);
  };
  // 提示未登录
  ctx.noLogin = async function () {
    ctx.state = 401;
    ctx.body = { ok: false, msg: 'need login', authfail: true };
  };
  await next();
}
